package com.tamecode.reflect;

/**
 * 类加载器默认有3个 RootClassLoader, ExtClassLoader, AppClassLoader
 * AppClassLoader 继承 ExtClassLoader， ExtClassLoader 继承 RootClassLoader
 *
 * 根加载器是使用 C++ 写的，所以在 Java 中访问不到，所以返回的是 null。
 *
 * 委托机制主要是为了安全考虑。防止加载覆盖核心库的类，如果你自己加载了 java.lang.String 的类覆盖了系统的，是非常危险的。
 *
 * 想知道类是从哪个JAR包加载的，可以使用 tools 下的 com.smart.utils.ClassLocationUtils.java
 *
 * @author Liqc
 * @date 2021/8/4 10:54
 */
public class ClassLoaderTest {

    public static void main(String[] args) {
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        System.out.println("current CL: " + classLoader);
        ClassLoader parent = classLoader.getParent();
        System.out.println("parent CL: " + parent);
        ClassLoader parent1 = parent.getParent();
        System.out.println("grandParent CL: " + parent1);
        /*
        current CL: sun.misc.Launcher$AppClassLoader@18b4aac2
        parent CL: sun.misc.Launcher$ExtClassLoader@29453f44
        grandParent CL: null
         */
    }

}
